/*******************************************************************************
  * @file                   ring_buffer.c
  * @Author:                MQjehovah                 mail:MQjehovah@hotmail.com
  * @version                1.0.0
  * @date                   2016/07/26  
  * @brief                  
  ******************************************************************************
  * @attention
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "ring_buffer.h"
/* Definition ----------------------------------------------------------------*/

/* Functions -----------------------------------------------------------------*/

/*******************************************************************************
  * @brief  环形缓冲区写一个字节              
  * @param  r：缓冲区指针 c：存入的字节              
  * @retval 0：写入失败 1：写入成功              
  * @Note   None              
*******************************************************************************/
u8 ring_buffer_write(ring_buffer *r, unsigned char c)
{
    u16 i = (r->tail + 1) % RX_BUFFER_SIZE;
    if (i != r->head)
    {
        r->buffer[r->tail] = c;
        r->tail = i;
        r->lenth++;
        return 1;
    }
    return 0;
}
/*******************************************************************************
  * @brief  环形缓冲区读一个字节              
  * @param  r：缓冲区指针 c：读出字节存放的地址              
  * @retval 0：读取失败 1：读取成功              
  * @Note   None              
*******************************************************************************/
u8 ring_buffer_read(ring_buffer *r, char *c)
{
    if (r->head == r->tail)
        return 0;
    *c = r->buffer[r->head];
    r->head = (r->head + 1) % RX_BUFFER_SIZE;
    r->lenth--;
    return 1;
}
/*******************************************************************************
  * @brief  缓冲区清空              
  * @param  None              
  * @retval None              
  * @Note   此处仅复位了指针，并没有删除缓冲区的内容              
*******************************************************************************/
void ring_buffer_flush(ring_buffer *r)
{
    r->head = 0;
    r->tail = 0;
    r->lenth = 0;
}

/*********************************END OF FILE**********************************/
